package com.dolphin.aiagentplatform.utils;

import com.dolphin.aiagentplatform.constant.ResponseCodeConst;
import com.dolphin.aiagentplatform.constant.UserRoleConst;
import com.dolphin.aiagentplatform.exception.BusinessException;
import com.dolphin.aiagentplatform.model.vo.user.UserVO;

/**
 * 用户角色权限检查工具类
 */
public class RoleCheckUtils {

    /**
     * 检查用户是否是管理员
     */
    public static void checkAdmin(UserVO userVO) {
        if (userVO == null) {
            throw new BusinessException(ResponseCodeConst.NOT_LOGIN_ERROR, "用户未登录");
        }

        if (userVO.getRole() == null || userVO.getRole() != UserRoleConst.ADMIN.getCode()) {
            throw new BusinessException(ResponseCodeConst.FORBIDDEN_ERROR, "权限不足，仅管理员可操作");
        }
    }

    /**
     * 检查用户是否是VIP用户或管理员
     */
    public static void checkVipOrAdmin(UserVO userVO) {
        if (userVO == null) {
            throw new BusinessException(ResponseCodeConst.NOT_LOGIN_ERROR, "用户未登录");
        }

        if (userVO.getRole() == null ||
                (userVO.getRole() != UserRoleConst.VIP.getCode() && userVO.getRole() != UserRoleConst.ADMIN.getCode())) {
            throw new BusinessException(ResponseCodeConst.FORBIDDEN_ERROR, "权限不足，需要VIP权限");
        }
    }

    /**
     * 检查用户是否有权限访问指定用户的资源
     * 管理员可以访问任何用户的资源，普通用户只能访问自己的资源
     */
    public static void checkAccessPermission(UserVO currentUser, Long targetUserId) {
        if (currentUser == null) {
            throw new BusinessException(ResponseCodeConst.NOT_LOGIN_ERROR, "用户未登录");
        }

        // 管理员有权访问任何用户资源
        if (currentUser.getRole() != null && currentUser.getRole() == UserRoleConst.ADMIN.getCode()) {
            return;
        }

        // 非管理员只能访问自己的资源
        if (!currentUser.getId().equals(targetUserId)) {
            throw new BusinessException(ResponseCodeConst.FORBIDDEN_ERROR, "权限不足，只能操作自己的资源");
        }
    }
}